home *** CD-ROM | disk | FTP | other *** search
- program paintpix (input,output);
- (*pgm. to load & display the paintpic pictures*)
- (*adapted from the paintpic basic display pgm.*)
- (*by david r. pounds*)
- (*update 1/1/86*)
- (*artwork is by alan m. pounds*)
-
- const clear=147;
- var choice:char;
- bkgcolr:integer;
-
- function getnumb:integer;
- var next:char;
- infile:text;
- begin
- read(infile,next);
- getnumb:=ord(next)
- end;(*getnumb*)
-
- function pokeit (address:integer):integer;
- var value,change,lobit,hibit,addr,poke:integer;
- begin
- value:=getnumb;
- lobit:=getnumb;
- hibit:=getnumb;
- change:=256*hibit+lobit;
- for addr:=0 to change-1
- do begin
- poke:=address+addr;
- mem [poke]:=chr(value)
- end;(*addr do*)
- pokeit:=address+change
- end;(*pokeit*)
-
- function picload (picname:string):integer;
- const coloram=$d800;
- bkgaddr=$5c00;
- picaddr=$6000;
- var first:char;
- infile:text;
- address:integer;
- begin
- reset(infile,picname);
- read(infile,first);
- if not (first='p') then exit(picload);
- picload:=getnumb;
- address:=coloram;
- repeat
- address:=pokeit (address)
- until (address > coloram+999);
- address:=bkgaddr;
- repeat
- address:=pokeit (address)
- until (address > bkgaddr+999);
- address:=picaddr;
- repeat
- address:=pokeit (address)
- until (address > picaddr+7999);
- close(infile)
- end;(*picload*)
-
- procedure bitmapset (bkgcolr:integer);
- const screenset=$d018;
- bitmaptog=$d011;
- multicolr=$d016;
- bkgrcolor=$d021;
- bankselct=$dd02;
- bankchang=$dd00;
- var toggle:integer;
- begin
- mem [screenset]:=chr(120);
- toggle:=ord(mem [bitmaptog]);
- toggle:=orb(toggle,32);
- mem [bitmaptog]:=chr(toggle);
- toggle:=ord(mem [multicolr]);
- toggle:=orb(toggle,16);
- mem [multicolr]:=chr(toggle);
- mem [bkgrcolor]:=chr(bkgcolr);
- toggle:=ord(mem [bankselct]);
- toggle:=orb(toggle,3);
- mem [bankselct]:=chr(toggle);
- toggle:=ord(mem [bankchang]);
- toggle:=andb(toggle,252);
- toggle:=orb(toggle,2);
- mem [bankchang]:=chr(toggle)(* 1 *)
- end;(*bitmapset*)
-
- procedure backtotext;
- const screenset=$d018;
- bitmaptog=$d011;
- multicolr=$d016;
- bkgrcolor=$d021;
- bankselct=$dd02;
- bankchang=$dd00;
- blue=6;
- var toggle:integer;
- begin
- mem [screenset]:=chr(21);
- toggle:=ord(mem [bitmaptog]);
- toggle:=andb(toggle,223);
- mem [bitmaptog]:=chr(toggle);
- toggle:=ord(mem [multicolr]);
- toggle:=andb(toggle,239);
- mem [multicolr]:=chr(toggle);
- mem [bkgrcolor]:=chr(blue);
- toggle:=ord(mem [bankselct]);
- toggle:=orb(toggle,3);
- mem [bankselct]:=chr(toggle);
- toggle:=ord(mem [bankchang]);
- toggle:=andb(toggle,252);
- toggle:=orb(toggle,3);
- mem [bankchang]:=chr(toggle)(* 0 *)
- end;(*backtotext*)
-
- procedure listpix;
- begin
- write(chr(clear));
- writeln;
- writeln('these are the picture titles');
- writeln;writeln;
- writeln('shuttle');writeln;
- writeln('starship');writeln;
- writeln('knight');writeln;
- writeln('earthrise #1');writeln;
- writeln('saturn #2');writeln;
- writeln('saturnport 3');writeln;
- end;(*listpix*)
-
- function nameok (name:string):boolean;
- var next:char;
- letter:1..16;
- begin
- if length(name)<=16
- then begin
- nameok:=true;
- for letter:=1 to length(name)
- do begin
- next:=copy(name,letter,1);
- if (next='?') or (next='*')
- then nameok:=false
- end(*letter for*)
- end(*length then*)
- else nameok:=false
- end;(*nameok*)
-
- function choosepic (from:string):string [16];
- var name:string;
- begin
- writeln;
- listpix;
- writeln;
- writeln('what picture do you want to ',from,' ?');
- writeln;
- repeat
- writeln('it must be 16 characters or less');
- writeln('and contain no ? or *');
- writeln;
- readln(name)
- until nameok (name);
- choosepic:=name
- end;(*choosepic*)
-
- function loader:integer;
- var from:string;
- picname:string [16];
- begin
- write(chr(clear));
- from:='load';
- picname:=choosepic (from);
- write(chr(clear));
- writeln('loading ',picname,' from disk');
- loader:=picload (picname)
- end;(*loader*)
-
- procedure viewpic (bkgcolr:integer);
- var dummy:char;
- begin
- writeln('press f7 to get back to menu');
- writeln;
- writeln('return to continue');
- readln(dummy);
- bitmapset (bkgcolr);
- if (inkey=chr(136))
- then backtotext
- end;(*viewpic*)
-
- begin (*main*)
- write(chr(clear));
- repeat
- write(chr(clear));
- writeln;
- writeln('do you want to load a picture');
- writeln('from the disk ? (l)');
- writeln;
- writeln('view loaded picture ? (v)');
- writeln;
- writeln('or quit ? (q)');
- writeln;
- readln(choice);
- writeln;
- case choice of
- 'l':bkgcolr:=loader;
- 'v':viewpic (bkgcolr)
- end(*choice case*)
- until choice='q'
- end.(*paintpix*)
-